#Gravity DEBUG - Ismael Rodriguez y Juan Terrer

#Imports
import pygame
from pygame.locals import  *

pygame.init() #Inicio PyGame
pygame.font.init() #Inicio fuente
screen = pygame.display.set_mode( (1024,768),0,32)#Inicio pantalla
black = pygame.image.load("img/black.png") #Imagen usada para oscurecer

reloj = pygame.time.Clock()

class pantalla():
    def __init__(self,width,height):
        self.width = width
        self.height = height 
        self.image = 0 #Guarda la imagen actual
        self.image_coun = 0
        self.nivel = 0
        self.black = black
        self.black.set_alpha(0)
        self.transp = 0
        self.cambiando = False
        self.oscureciendo = False
        
    def inicializar(self,nivel,fase_inicial): #Inicias con el nivel y la fase inicial
        self.image_count = fase_inicial
        self.nivel = nivel
        self.image = self.load_image(nivel,self.image_count)
        print "Nivel inicializado..."
    
    def load_image(self,prefijo,numero): #Carga la imagen de un nivel determinado
    #Por ejemplo, tutorial, imagen 3: load_image("tutorial",3) carga "levels/tutorial_3.jpg
        return pygame.image.load("levels/" + prefijo + "_" + str(numero) + ".jpg")
        
    def next_img(self, directo,salto): #CAMBIA EL NUMERO DE LA IMAGEN Y LLAMA A FUNCION DE OSCURECER
        #Si especificas directo = True, saltara al especificado en salto
        #Si direct = False, saltara las posiciones que digas (+1, -1)
        if directo == True:
            self.image_count = salto
        else:
            self.image_count += salto
        
        self.cambio() #Mando oscurecer, cambiar y aclarar
        print "Salto a frame de nivel " + str(self.image_count)
    
    def controles(self): #Controles de DEBUG
        for event in pygame.event.get():
            if event.type == KEYDOWN:
                if event.key == K_RIGHT:
                    self.next_img(False,1)
                elif event.key == K_LEFT:
                    self.next_img(False,-1)
            
        
    def update(self,screen): #Se encarga de llamar a controles, dibujado y otros.
    #Se ejecuta siempre que el objeto este activo.
        self.controles()
        screen.blit(self.image,(0,0))
        screen.blit(self.black,(0,0))
        
        #Esta parta se encarga de oscurecer y aclarar
        if self.cambiando == True:
            if self.oscureciendo == True and self.transp <=270: #Oscureciendo, hasta 270
                self.transp += 50
                
            if self.transp > 270: #Si se pasa de oscurecer, aclarecer
                self.oscureciendo = False
                self.image = self.load_image(self.nivel,self.image_count) #Cambia la imagen.
                
            if self.oscureciendo == False and self.transp >= 0: #Aclarando, hasta 0
                self.transp -=50
                
            if self.transp <=0 and self.oscureciendo == False: #Si se pasa de aclarecer, fin
                self.cambiando = False
                
            self.black.set_alpha(self.transp) #Cambia la transparencia de la imagen
            
    def cambio(self): #OSCURECE, CAMBIA EL FONDO Y ACLARA
       self.cambiando = True #variable que inicia el cambio, a True
       self.transp = 0
       self.oscureciendo = True
       


###CODIGO MAIN
nivel = pantalla(1024,768) #Inicio el sistema de niveles
nivel.inicializar("nivel",0)

while True:
    reloj.tick(70) #Limito los frames a 70 FPS
    nivel.update(screen) 
    pygame.display.flip()

